/**
* C++对比java的继承初始化顺序（Class.forName("XXX.java")会同时执行->静态块）
* 编译：javac -encoding UTF-8 java_extend.java
* 运行：java java_extend

   执行爷爷静态块
   执行爸爸静态块
   执行你的静态块
   执行爷爷构造块
   执行爷爷构造函数
   执行爸爸构造块
   执行爸爸构造函数
   执行你的构造块
   执行你的构造函数
   ----------------
   执行爷爷构造块
   执行爷爷构造函数
   执行爸爸构造块
   执行爸爸构造函数
   执行你的构造块
   执行你的构造函数

**/
public class java_extend{
  public static void main(String[] args) {
  		//new You();
  		//System.out.println("----------------");
  		//new You();

        //C++的virtual目的就是达到java多态一样的效果
  		Grandpa grandpa001 = new Grandpa();
  		Grandpa grandpa002 = new Dad();
  		Grandpa grandpa003 = new You();
  		System.out.println("----------------");
  		grandpa001.say();
  		grandpa002.say();
  		grandpa003.say();
  	}
}
//基类
class Grandpa {
    public static int Age = 80;
    public Grandpa(){
        System.out.println("执行爷爷构造函数");
    }
    static{
        System.out.println("执行爷爷静态块");
    }
    {
        System.out.println("执行爷爷构造块");
    }
    public void say(){
       System.out.println("执行爷爷say");
    }
}
//子类
class Dad extends Grandpa {
    public static int Age = 50;
    public Dad(){
        System.out.println("执行爸爸构造函数");
    }
    {
        System.out.println("执行爸爸构造块");
    }
    static{
        System.out.println("执行爸爸静态块");
    }
    public void say(){
        System.out.println("执行爸爸say");
    }
}
//子类
class You extends Dad {
    public static final int Age = 20;
    public You(){
        System.out.println("执行你的构造函数");
    }
    static{
        System.out.println("执行你的静态块");
    }
    {
        System.out.println("执行你的构造块");
    }
    public void say(){
        System.out.println("执行你的say");
    }
}
